package utils

import (
	"fmt"
	"ssr/dto"
	"ssr/models"
	"strconv"
)

func DisposeJackpotBet(params *dto.BetAddParamsDTO) (*models.Bet, error) {
	var betModel = &models.Bet{}
	betModel.BetType = params.BetType
	betModel.OddsValue = params.OddsValue
	betModel.WinAmount = params.BetAmount * params.OddsValue * params.BetCount
	betModel.IsWin = false
	betModel.BetCount = params.BetCount
	betModel.BetAmount = params.BetAmount
	betModel.Result = params.Value
	return betModel, nil
}

func JudgeBet(gameResult *models.GameResult, bet *models.Bet) (*models.Bet, error) {
	dice1 := gameResult.Dice1
	dice2 := gameResult.Dice2
	dice3 := gameResult.Dice3
	sum := gameResult.Sum
	fmt.Printf("dice1: %v, dice2: %v, dice3: %v, sum: %v\n", dice1, dice2, dice3, sum)
	switch bet.BetType {
	case "大小":
		result := bet.Result
		if result == "大" && sum > 10 {
			bet.IsWin = true
		} else if result == "小" && sum < 11 {
			bet.IsWin = true
		}

	case "单双":
		result := bet.Result
		if result == "单" && sum%2 != 0 {
			bet.IsWin = true
		} else if result == "双" && sum%2 == 0 {
			bet.IsWin = true
		}
	case "二同号复选":
		resultInt, err := strconv.Atoi(bet.Result)
		if err != nil {
			return nil, err
		}
		// 找出两个相同的数字
		if (dice1 == dice2 && dice1 == resultInt) || (dice2 == dice3 && dice2 == resultInt) || (dice1 == dice3 && dice1 == resultInt) {
			bet.IsWin = true
		}

	case "三同号单选":
		resultInt, err := strconv.Atoi(bet.Result)
		if err != nil {
			return nil, err
		}
		if resultInt == dice1 && resultInt == dice2 && resultInt == dice3 {
			bet.IsWin = true
		}
	case "和值":
		// 转bet.Result为int
		resultInt, err := strconv.Atoi(bet.Result)
		if err != nil {
			return nil, err
		}
		if resultInt == sum {
			bet.IsWin = true
		}
	case "三不同号":
		if dice1 != dice2 && dice2 != dice3 && dice1 != dice3 {
			bet.IsWin = true
		}
	case "三同号通选":
		if dice1 == dice2 && dice2 == dice3 {
			bet.IsWin = true
		}
	case "三连号通选":
		// 对dice1, dice2, dice3进行排序
		if dice1 > dice2 {
			dice1, dice2 = dice2, dice1
		}
		if dice2 > dice3 {
			dice2, dice3 = dice3, dice2
		}
		if dice1 > dice2 {
			dice1, dice2 = dice2, dice1
		}
		strJudge := fmt.Sprintf("%v%v%v", dice1, dice2, dice3)
		if strJudge == bet.Result {
			bet.IsWin = true
		}
	}
	return bet, nil
}
